PM_FUNC_NORM_ATTRIB SKILL:SkillAcid( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Acid", .Type = TYPE_POISON, .callTypes = CALL_BIND_DOWN, .PP = 30, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Damages and may decrease enemy's Defense." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillAcidArmor( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Acid Armor", .Type = TYPE_POISON, .callTypes = CALL_TAKE_DAMAGE, .PP = 40, .Charges = 1, .DelayTime = 0.0 );
		case CALL_HELP:     return SkillHelp( "Increases armor when attacked and damages back." );
		case CALL_TAKE_DAMAGE:
		{
			new CsArmorType:iArmorType;
			new Int:iOldArmor = cs_get_user_armor( id, iArmorType );
			if ( iArmorType == CS_ARMOR_NONE )
				iArmorType = CS_ARMOR_KEVLAR;

			new Int:iArmorBonus = StatClamp( id, STAT_DEFENSE, 5, 20 );
			if ( iArmorBonus > 0 )
			{
				cs_set_user_armor( id, iOldArmor + iArmorBonus, iArmorType );

				SkillDamage( .victim = g_iAttacker,
							.attacker = id,
							.damage = iArmorBonus
							);

				SoundHit( id );

				return SKILL_USED;
			}
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillPoisonGas( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Poison Gas", .Type = TYPE_POISON, .callTypes = CALL_BIND_DOWN, .PP = 40, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Poisons enemy." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillPoisonSting( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Poison Sting", .Type = TYPE_POISON, .callTypes = CALL_GIVE_DAMAGE, .PP = 35, .Charges = 1, .DelayTime = 5.0 );
		case CALL_HELP:     return SkillHelp( "Chance to Poison enemies when you attack." );
		case CALL_GIVE_DAMAGE:
		{
			if ( StatChance( id, STAT_ATTACK, 10, 35 ) )
			{
				new Int:iPoisonTime = StatClamp( id, STAT_SPECIAL, 3, 10 );

				StatusApply( g_iVictim,
							.iInflictorID = id, 
							.iStatus = STATUS_POISON,
							.iAmount = iPoisonTime
							);

				EffectBeamEnts( .iPlayer = 0,
								.iStartEnt = id,
								.iEndEnt = g_iVictim,
								.iSprite = SPRITE_POISON,
								.iStartFrame = 0,
								.iFrameRate = 10,
								.fLife = 3.0,
								.iLineWidth = iPoisonTime,
								.iNoiseAmp = 0,
								.iRed = 255,
								.iGreen = 0,
								.iBlue = 255,
								.iAlpha = 255,
								.iScrollSpeed = 10
							);

				return SKILL_USED;
			}
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillPoisonPowder( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Poison Powder", .Type = TYPE_POISON, .callTypes = CALL_BIND_DOWN, .PP = 35, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Poisons enemy." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillSludge( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Sludge", .Type = TYPE_POISON, .callTypes = CALL_GIVE_DAMAGE, .PP = 20, .Charges = 3, .DelayTime = 0.0 );
		case CALL_HELP:     return SkillHelp( "30% chance to poison people you attack." );
		case CALL_GIVE_DAMAGE:
		{
			if ( Chance( 30 ) )
			{
				StatusApply( .iPlayer = g_iVictim,
							.iInflictorID = id,
							.iStatus = STATUS_POISON,
							.iAmount = StatClamp( id, STAT_SPECIAL, 3, 10 )
							);

				SoundHit( id );

				return SKILL_USED;
			}
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillSmog( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Smog", .Type = TYPE_POISON, .callTypes = CALL_BIND_DOWN, .PP = 20, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Has a ~30% chance to poison the target." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillToxic( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Toxic", .Type = TYPE_POISON, .callTypes = CALL_BIND_DOWN, .PP = 10, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "The target is badly poisoned, with the damage caused by poison doubling after each turn." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}




